Microsoft Technologies LINQ Expressions এবং Complex Query তৈরি গাইড ও নোট

281

LINQ (Language Integrated Query) হল .NET Framework এর একটি শক্তিশালী ফিচার, যা ডেটাবেস, XML, বা অন্য কোনো ডেটা সোর্স থেকে ডেটা কুয়েরি করতে সাহায্য করে। NHibernate এর সাথে LINQ ব্যবহার করার মাধ্যমে আপনি টাইপ-সেফ ডেটা কুয়েরি তৈরি করতে পারেন এবং SQL কোড লিখতে হবে না। LINQ Expressions ব্যবহার করে জটিল কুয়েরি তৈরি করা খুবই সহজ এবং পরিষ্কার।


LINQ Expressions কী?

LINQ Expressions হল C# কোডের মধ্যে ব্যবহৃত এক ধরনের কুয়েরি এক্সপ্রেশন যা ডেটা সোর্স থেকে ডেটা আনার জন্য ব্যবহৃত হয়। এই এক্সপ্রেশনগুলো সাধারণত Method Syntax বা Query Syntax এর মাধ্যমে লেখা হয়।

  • Method Syntax: LINQ মেথড ব্যবহার করে কুয়েরি তৈরি করা হয়, যেমন Where(), Select(), OrderBy(), ইত্যাদি।
  • Query Syntax: SQL এর মতো কুয়েরি তৈরি করা হয় যা C# কোডে LINQ কোয়েরি স্টাইল ব্যবহার করে লেখা হয়।

LINQ Expressions এর উদাহরণ

1. Basic LINQ Expression (Method Syntax)

এখানে আমরা একটি Employee টেবিল থেকে কর্মচারীদের নাম এবং বয়স বের করতে LINQ Expressions ব্যবহার করব।

using NHibernate.Linq;

public void GetEmployeeDetails()
{
    var employees = session.Query<Employee>()
                           .Where(e => e.Age > 30)
                           .OrderBy(e => e.Name)
                           .Select(e => new { e.Name, e.Age })
                           .ToList();

    foreach (var employee in employees)
    {
        Console.WriteLine($"Name: {employee.Name}, Age: {employee.Age}");
    }
}

এখানে:

  • session.Query<Employee>(): Employee টেবিল থেকে ডেটা কুয়েরি করা হচ্ছে।
  • Where(e => e.Age > 30): এখানে Where ক্লজ দিয়ে বয়স ৩০ এর উপরে এমন কর্মচারীদের ফিল্টার করা হয়েছে।
  • OrderBy(e => e.Name): কর্মচারীদের নাম অনুযায়ী সাজানো হয়েছে।
  • Select(e => new { e.Name, e.Age }): কর্মচারীর নাম এবং বয়স নির্বাচন করা হয়েছে।

2. Query Syntax Example

LINQ এর Query Syntax অনেকটা SQL এর মতো দেখতে হয়। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Employee টেবিল থেকে নাম এবং বয়স নির্বাচিত হচ্ছে।

public void GetEmployeeDetails()
{
    var employees = from e in session.Query<Employee>()
                    where e.Age > 30
                    orderby e.Name
                    select new { e.Name, e.Age };

    foreach (var employee in employees)
    {
        Console.WriteLine($"Name: {employee.Name}, Age: {employee.Age}");
    }
}

এখানে:

  • from e in session.Query<Employee>(): Employee টেবিল থেকে ডেটা কুয়েরি করা হচ্ছে।
  • where e.Age > 30: বয়স ৩০ এর বেশি কর্মচারীদের নির্বাচন করা হয়েছে।
  • orderby e.Name: কর্মচারীদের নাম অনুসারে সাজানো হয়েছে।
  • select new { e.Name, e.Age }: নাম এবং বয়স নির্বাচিত করা হয়েছে।

Complex Query তৈরি করা

LINQ Expressions ব্যবহার করে আপনি জটিল কুয়েরি তৈরি করতে পারেন, যেমন JOIN, GROUP BY, HAVING, Aggregation Functions (যেমন Count(), Sum(), Avg()), ইত্যাদি।

1. JOIN কুয়েরি উদাহরণ

ধরা যাক, আপনার Employee এবং Department নামের দুটি টেবিল রয়েছে এবং আপনি Employee এবং তার Department এর মধ্যে সম্পর্ক তৈরি করতে চান।

public void GetEmployeesWithDepartments()
{
    var employeeDetails = from e in session.Query<Employee>()
                          join d in session.Query<Department>()
                          on e.DepartmentId equals d.Id
                          select new
                          {
                              e.Name,
                              e.Age,
                              DepartmentName = d.Name
                          };

    foreach (var employee in employeeDetails)
    {
        Console.WriteLine($"Employee: {employee.Name}, Age: {employee.Age}, Department: {employee.DepartmentName}");
    }
}

এখানে:

  • join: Employee এবং Department টেবিলের মধ্যে DepartmentId এর মাধ্যমে সম্পর্ক স্থাপন করা হয়েছে।
  • select new { e.Name, e.Age, d.Name }: কর্মচারীর নাম, বয়স এবং তাদের বিভাগের নাম নির্বাচন করা হয়েছে।

2. Group By Example

ধরা যাক, আপনি কর্মচারীদের বিভাগ অনুসারে গ্রুপ করতে চান এবং প্রতি বিভাগে কতজন কর্মচারী আছে তা বের করতে চান।

public void GetEmployeeCountByDepartment()
{
    var departmentGroups = from e in session.Query<Employee>()
                           group e by e.Department into g
                           select new
                           {
                               Department = g.Key,
                               EmployeeCount = g.Count()
                           };

    foreach (var group in departmentGroups)
    {
        Console.WriteLine($"Department: {group.Department}, Employee Count: {group.EmployeeCount}");
    }
}

এখানে:

  • group e by e.Department: Employee টেবিলের কর্মচারীদের বিভাগ অনুসারে গ্রুপ করা হয়েছে।
  • g.Count(): প্রতিটি বিভাগে কর্মচারীর সংখ্যা গণনা করা হয়েছে।

3. Aggregation Functions Example

আপনি LINQ Expressions ব্যবহার করে সহজেই অ্যাগ্রিগেট ফাংশন যেমন Sum(), Avg(), Max(), Min() ইত্যাদি ব্যবহার করতে পারেন।

public void GetAverageEmployeeAge()
{
    var averageAge = session.Query<Employee>()
                            .Average(e => e.Age);

    Console.WriteLine($"Average Employee Age: {averageAge}");
}

এখানে:

  • Average(e => e.Age): Employee টেবিল থেকে গড় বয়স বের করা হয়েছে।

Summary

LINQ Expressions ব্যবহার করে ডেটাবেস থেকে ডেটা কুয়েরি করা খুবই সহজ এবং শক্তিশালী। NHibernate এর সাথে LINQ ব্যবহার করার মাধ্যমে আপনি টাইপ-সেফ এবং রিডেবল কোড লেখার সুবিধা পান। আপনি বিভিন্ন ধরনের কুয়েরি যেমন JOIN, GROUP BY, এবং অ্যাগ্রিগেট ফাংশন ব্যবহার করে জটিল কুয়েরি তৈরি করতে পারেন। LINQ এর Method Syntax এবং Query Syntax উভয়ই খুবই ব্যবহারযোগ্য এবং আপনি যে কোন একটি ব্যবহার করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...